var app = getApp()


/**
 * 地址
 */
// const domainName = 'http://www.test5.com';//本地地址
const domainName = 'https://api.chenxiaoxiang.top'; //线上地址




function url() {
  return domainName;
}

/**
 * 过期时间
 */
const TOKEN_PAST_TIME = 7200000; //token过期时间：2小时
const TOKEN_REFRESH_TIME = 6600000; //重载token时间：1小时50分钟

/**
 * 封装wx.request
 *Function：
 *  POST方式:request
 *  GET方式:getrequest
 * 参数：
 *  {string}    url   路由
 *  {Object}    data  data
 *  {function}  cb    回调（callback）
 * 
 */
function getrequest(url, data, cb) {
  var cmmnData = {} //公用参数(扩展)
  data = Object.assign(data, cmmnData)
  //发送请求
  wx.request({
    url: domainName + '/api/' + url,
    data: data,
    header: {
      'content-type': 'application/json;charset=UTF-8',
    },
    method: 'GET',
    dataType: 'json',
    success: function(res) {
      cb(res.data)
    },
    fail: function(res) {
      console.log('接口请求失败')
    }
  })
}

function request(url, data, cb) {
  var cmmnData = {} //公用参数(扩展)
  data = Object.assign(data, cmmnData)
  //发送请求
  wx.request({
    url: domainName + '/api/' + url,
    data: data,
    header: {
      'content-type': 'application/json;charset=UTF-8'
    },
    method: 'POST',
    dataType: 'json',
    success: function(res) {
      cb(res.data)
    },
    fail: function(res) {
      console.log('接口请求失败')
    }
  })
}

/**
 * token校验函数
 * 
 * login  {bool}   default:false 
 * 有参数为true时，此函数有返回值。返回值为true自动刷新token，不刷新时刷新操作时间，需要重新登录时返回false
 */
function checkAccessToken(login = false) {

  if (wx.getStorageSync('loadingToken')) return;

  var last = wx.getStorageSync("accessTokenTime")
  var last_operation = wx.getStorageSync('last_operation')
  var time = new Date().getTime()
  var tokenTime = time - last //token时间
  var operationTime = time - last_operation //上次操作时间

  if (operationTime >= TOKEN_PAST_TIME) {
    /**
     * 登录超时
     * 上次操作时间>过期时间
     */
    wx.setStorageSync('loadingToken', true)
    wx.showToast({
      title: '登录状态失效，请重新登录',
      icon: 'none'
    })
    var email = wx.getStorageSync('email')
    wx.clearStorageSync()
    wx.setStorageSync('email', email)
    if (login) {
      return false;
    } else {
      wx.reLaunch({
        url: '/pages/login/login',
      })
    }
  } else {
    /**
     * 不刷新
     * 上次操作时间<刷新时间且上次token刷新时间<刷新时间
     */
    if (operationTime < TOKEN_REFRESH_TIME && tokenTime < TOKEN_PAST_TIME) {

      wx.setStorage({
        key: 'loadingToken',
        data: false,
      })
      var time = new Date().getTime()
      wx.setStorage({
        key: 'last_operation',
        data: time
      }) //记录当前时间为上次刷新时间
      if (login) {
        return true
      }
    } else {
      /**
       * 不满足登录超时和不刷新的条件，执行刷新
       */
      wx.setStorageSync('loadingToken', true)
      var params = {}
      params.email = wx.getStorageSync('email')
      params.grantType = 'refresh_token'
      params.refreshToken = wx.getStorageSync('refreshToken')
      //发送登录请求
      wx.request({
        url: domainName + '/api/' + 'get_passport_token',
        data: params,
        method: 'POST',
        success: function(res) {
          if (res.data.code == 0) {
            //刷新保存token
            wx.setStorageSync('accessToken', res.data.data.access_token)
            wx.setStorageSync('refreshToken', res.data.data.refresh_token)
            //保存当前获取accessToken的时间
            var time = new Date().getTime()
            wx.setStorageSync('accessTokenTime', time)
            //保存上次操作时间
            wx.setStorageSync('last_operation', time)
            //保存用户信息
            getrequest("user", {}, function(userData) {
              wx.setStorageSync('userData', userData)
              console.log("refresh token,time,user")
            })
            wx.setStorageSync('last_operation', time)
            wx.setStorageSync('loadingToken', false)
            if (login) {
              return true
            }
          } else { //登录失败重载到登录页
            wx.showToast({
              title: '身份信息有误，请重新登录',
              icon: 'none'
            })
            var email = wx.getStorageSync('email')
            wx.clearStorageSync()
            wx.setStorageSync('email', email)
            if (login) {
              return false;
            } else {
              wx.reLaunch({
                url: '/pages/login/login',
              })
            }
          }
        }
      })
    }
  }
}


module.exports = {
  url: url,
  //request
  checkAccessToken: checkAccessToken,
  request: request,
  getrequest: getrequest,
}